#include "SerialRCon.h"
#include "ProcElement.h"
#include "Application.h"

namespace lagniappe
{

SerialRCon::SerialRCon()
{
}

SerialRCon::~SerialRCon()
{
}

SerialRCon::SerialRCon(RCon * src) : RCon(*src)
{
	memcpy(&serialBuffer, src->getRData(), src->getSize());
	strcpy(opName, src->getOp()->getName().c_str());
	strcpy(portName, src->getPort().c_str());
	refinedDataSize = dataSize;
}

SerialRCon::SerialRCon(SerialRCon * src) 
{
	memcpy(&serialBuffer, &(src->serialBuffer), SERIAL_BUFF_SIZE);
	strcpy(opName, src->opName);
	strcpy(portName, src->portName);
	refinedDataSize = src->refinedDataSize;
}

RCon * 
SerialRCon::produceNativeRCon(ProcElement * proc)
{
	RData * dataPtr = new char[dataSize];
	memcpy(dataPtr, &serialBuffer, dataSize);
	RCon * retRCon;
	std::string refinedOpName(opName);
	std::string refinedPortName(portName);
	if(refinedOpName == "monitor") {
		retRCon = new RCon(NULL, dataPtr, refinedPortName, refinedDataSize);
	}
	else {
		retRCon = new RCon(proc->getApp()->lookupOperator(refinedOpName), dataPtr, refinedPortName, refinedDataSize);
	}
	return retRCon;
}

}
